﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ModeloMagiPack.Entidades;
using DALMagiPack.Funcionalidad;

namespace BLLMagiPack.Managers
{
    public class BLLCategoria: BLLMagiPack
    {
        public void CargarCategoria(Categoria categoria)
        {
            DALMagiPack<Categoria> dalCategoria = new DALMagiPack<Categoria>();
            dalCategoria.Insertar(categoria);
        }

        public void ModificarCategoria(Categoria categoria)
        {
            DALMagiPack<Categoria> dalCategoria = new DALMagiPack<Categoria>();
            dalCategoria.Modificar(categoria);
        }

        public void EliminarCategoria(Categoria categoria)
        {
            List<string> elementos = new List<string>();

            if (new BLLMovimiento().PoseeMovimientos(categoria.IdCategoria))
                elementos.Add("movimientos");
            ValidarDependencia(elementos, "categoría", categoria.Nombre, false);

            DALMagiPack<Categoria> dalCategoria = new DALMagiPack<Categoria>();
            dalCategoria.Eliminar(categoria);
        }

        public void ActualizarOrdenCategorias(List<int> idsCategorias)
        {
            DALMagiPack<Categoria> dalCategoria = new DALMagiPack<Categoria>();

            dalCategoria.IniciarConexión();
            dalCategoria.IniciarTransacción();

            for (int i = 0; i < idsCategorias.Count; i++)
            {
                Categoria categoria = dalCategoria.Traer(new Categoria() { IdCategoria = idsCategorias[i] }, new List<Filtro>() { new Filtro() { Columna = NombresColumnas.IdCategoria, Tipo = TipoFiltro.Equal } }).FirstOrDefault();
                categoria.OrdenReporte = i;
                dalCategoria.Modificar(categoria);
            }

            dalCategoria.ConfirmarTransacción();
            dalCategoria.CerrarConexión();
        }

        public List<Categoria> TraerCategorias(string nombre)
        {
            DALMagiPack<Categoria> dalCategorias = new DALMagiPack<Categoria>();

            if (nombre != null)
            {
                Categoria filtro = new Categoria() { Nombre = nombre };
                List<Filtro> opciones = new List<Filtro>() { new Filtro() { Columna = NombresColumnas.Nombre, Tipo = TipoFiltro.Like } };

                return dalCategorias.Traer(filtro, opciones);
            }
            else
                return dalCategorias.Traer(new Categoria(), new List<Filtro>());
        }

        public List<Categoria> TraerCategorias()
        {
            return TraerCategorias(null);
        }

        public Categoria TraerCategoria(int idCategoria)
        {
            Categoria filtro = new Categoria() { IdCategoria = idCategoria };
            List<Filtro> filtros = new List<Filtro>() { new Filtro() { Columna = NombresColumnas.IdCategoria, Tipo = TipoFiltro.Equal } };
            DALMagiPack<Categoria> dalCategorias = new DALMagiPack<Categoria>();

            return dalCategorias.Traer(filtro, filtros).FirstOrDefault();
        }
    }
}
